/***********************************************
 **** 版权声明处 **
 ****  为了方便阅读和维护，请严格遵守相关代码规范，谢谢   ****
 *******************************************/
package com.hnisi.board.view
{
	/*******************************************
	 **** huangjixin,2012-6-12,上午9:57:39 **
	 **** 请一句话表述该类主要作用  **
	 *******************************************/
	import com.hnisi.board.common.Global;
	import com.hnisi.board.controller.DashBoardEvent;
	import com.hnisi.board.view.skins.DragDropZoneSkin;
	
	import flash.events.Event;
	
	import mx.core.IVisualElement;
	import mx.core.UIComponent;
	import mx.events.DragEvent;
	import mx.managers.DragManager;
	
	import spark.components.Group;
	import spark.components.SkinnableContainer;
	
	public class DragDropZone extends SkinnableContainer
	{
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// private 类私有静态变量和静态常量声明处。（全部大写，使用下划线进行分割）
		// 例如：private static const EXAMPLE:String = "example";
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// public 类公有静态变量和静态常量声明处。（全部大写，使用下划线进行分割）
		// 例如：public static const EXAMPLE:String = "example";
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		
		
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// private 私有变量声明处，请以“_”开头定义变量
		// 例如：private var _example:String;
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		
		
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// public 公有变量声明处
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		[SkinPart(required="true")]
		public var boardGroup:Group;
		
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// 构造函数，初始化相关工作可以放在里面
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		public function DragDropZone()
		{
			super();
			
			setStyle("skinClass",DragDropZoneSkin);
			
			addEventListener(DragEvent.DRAG_ENTER,onDragEnter);
			addEventListener(DragEvent.DRAG_DROP,onDragDrop);
			addEventListener(DragEvent.DRAG_EXIT,onDragExit);
			//--最大化；
			addEventListener(DashBoardEvent.MAX,onMax);
		}
		//构造函数结束
		
		
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// getter和setter函数
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		
		
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// 相关事件响应函数和逻辑函数存放处
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		/**
		 * 
		 * @param event
		 * 
		 */
		protected function onMax(event:DashBoardEvent):void
		{
			if(event.data && event.data is DashBoardPanel){
				DashBoardPanel(event.data).x = this.parent.x;
				DashBoardPanel(event.data).y = this.parent.y;
				DashBoardPanel(event.data).width = this.parent.width;
				DashBoardPanel(event.data).height = this.parent.height;
			}
		}
		
		protected function onDragEnter(event:DragEvent):void
		{
			if(event.dragSource.hasFormat(Global.getInstance().dataFormat)){
				if(event.dragInitiator == this){
					return;
				}
				
				DragManager.acceptDragDrop(UIComponent(event.currentTarget));
				
				drawRect();
			}
		}
		
		protected function onDragDrop(event:DragEvent):void
		{
			addElement(event.dragInitiator as IVisualElement);
			clearRect();
		}
		
		protected function onDragExit(event:DragEvent):void
		{
			clearRect();
		}
		
		protected function onDragOver(event:DragEvent):void
		{
			if(event.dragSource.hasFormat(Global.getInstance().dataFormat)){
				drawRect();
			}
		}
		
		protected function drawRect():void{
			boardGroup.graphics.clear();
			boardGroup.graphics.lineStyle(2,0x3A3A82);
			boardGroup.graphics.drawRect(boardGroup.x,boardGroup.y,boardGroup.width,boardGroup.height);
			trace(x+" "+y+" "+width+" "+height);
		}
		
		protected function clearRect():void{
			boardGroup.graphics.clear();
		}
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// override 覆盖函数
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
	}//类结束
}//包结束